package py.una.pol.ii.is2.domain.taller;

import py.una.pol.ii.is2.domain.sistema.Usuario;
import java.io.Serializable;
import java.math.BigInteger;
import java.util.Collection;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import py.una.pol.ii.is2.domain.flota.Vehiculo;

/**
 * @author mbenitez
 * @date 03/05/2009
 */
@Entity
@Table(name = "orden_mantenimiento")
@NamedQueries({@NamedQuery(name = "OrdenMantenimiento.findAll", query = "SELECT o FROM OrdenMantenimiento o"), @NamedQuery(name = "OrdenMantenimiento.findByOrmaFecha", query = "SELECT o FROM OrdenMantenimiento o WHERE o.ormaFecha = :ormaFecha"), @NamedQuery(name = "OrdenMantenimiento.findByOrmaCod", query = "SELECT o FROM OrdenMantenimiento o WHERE o.ormaCod = :ormaCod"), @NamedQuery(name = "OrdenMantenimiento.findByOrmaCostoTotal", query = "SELECT o FROM OrdenMantenimiento o WHERE o.ormaCostoTotal = :ormaCostoTotal"), @NamedQuery(name = "OrdenMantenimiento.findByOrmaEstado", query = "SELECT o FROM OrdenMantenimiento o WHERE o.ormaEstado = :ormaEstado")})
public class OrdenMantenimiento implements Serializable {
    private static final long serialVersionUID = 1L;
    // constantes de la entidad
    public static final Integer estadoEjecutada = 2;
    public static final Integer estadoEnEjecucion = 1;
    public static final Integer estadoPendiente = 0;

    @Column(name = "orma_fecha")
    @Temporal(TemporalType.DATE)
    private Date ormaFecha;
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="orma_generator")
    @SequenceGenerator(name="orma_generator", sequenceName="orden_mantenimiento_orma_cod_seq", allocationSize=1)
    @Basic(optional = false)
    @Column(name = "orma_cod")
    private Integer ormaCod;
    @Basic(optional = false)
    @Column(name = "orma_costo_total")
    private BigInteger ormaCostoTotal;
    @Basic(optional = false)
    @Column(name = "orma_estado")
    private int ormaEstado;
    @JoinColumn(name = "orma_cod_usuario", referencedColumnName = "usua_alias")
    @ManyToOne(optional = false)
    private Usuario ormaCodUsuario;
    @JoinColumn(name = "orma_cod_vehiculo", referencedColumnName = "vehi_cod")
    @ManyToOne(optional = false)
    private Vehiculo ormaCodVehiculo;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "deopCodOrden")
    private Collection<DetalleOrdenMantenimientoPlantilla> detalleOrdenMantenimientoPlantillaCollection;

    public OrdenMantenimiento() {
    }

    public OrdenMantenimiento(Integer ormaCod) {
        this.ormaCod = ormaCod;
    }

    public OrdenMantenimiento(Integer ormaCod, BigInteger ormaCostoTotal, int ormaEstado) {
        this.ormaCod = ormaCod;
        this.ormaCostoTotal = ormaCostoTotal;
        this.ormaEstado = ormaEstado;
    }

    public Date getOrmaFecha() {
        return ormaFecha;
    }

    public void setOrmaFecha(Date ormaFecha) {
        this.ormaFecha = ormaFecha;
    }

    public Integer getOrmaCod() {
        return ormaCod;
    }

    public void setOrmaCod(Integer ormaCod) {
        this.ormaCod = ormaCod;
    }

    public BigInteger getOrmaCostoTotal() {
        return ormaCostoTotal;
    }

    public void setOrmaCostoTotal(BigInteger ormaCostoTotal) {
        this.ormaCostoTotal = ormaCostoTotal;
    }

    public int getOrmaEstado() {
        return ormaEstado;
    }

    public void setOrmaEstado(int ormaEstado) {
        this.ormaEstado = ormaEstado;
    }

    public Usuario getOrmaCodUsuario() {
        return ormaCodUsuario;
    }

    public void setOrmaCodUsuario(Usuario ormaCodUsuario) {
        this.ormaCodUsuario = ormaCodUsuario;
    }

    public Vehiculo getOrmaCodVehiculo() {
        return ormaCodVehiculo;
    }

    public void setOrmaCodVehiculo(Vehiculo ormaCodVehiculo) {
        this.ormaCodVehiculo = ormaCodVehiculo;
    }

    public Collection<DetalleOrdenMantenimientoPlantilla> getDetalleOrdenMantenimientoPlantillaCollection() {
        return detalleOrdenMantenimientoPlantillaCollection;
    }

    public void setDetalleOrdenMantenimientoPlantillaCollection(Collection<DetalleOrdenMantenimientoPlantilla> detalleOrdenMantenimientoPlantillaCollection) {
        this.detalleOrdenMantenimientoPlantillaCollection = detalleOrdenMantenimientoPlantillaCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (ormaCod != null ? ormaCod.hashCode() : 0);
        return hash;
    }

    /**
     * Compara si el elemento recibido como parámetro es igual al elemento actual
     * @param object segundo elemento de comparación
     * @return true si los elementos son iguales, en otro caso false
     */
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof OrdenMantenimiento)) {
            return false;
        }
        OrdenMantenimiento other = (OrdenMantenimiento) object;
        if ((this.ormaCod == null && other.ormaCod != null) || (this.ormaCod != null && !this.ormaCod.equals(other.ormaCod))) {
            return false;
        }
        return true;
    }

    /**
     * Permite mostrar en la salida estándar
     * @return String conteniendo el código de la orden de mantenimiento
     */
    @Override
    public String toString() {
        return "py.una.pol.ii.is2.dao.flota.OrdenMantenimiento[ormaCod=" + ormaCod + "]";
    }

}
